#include<principal.h>

COLUNAS::COLUNAS()
	{
	this->n_campos = 7;
	for(int i=0; i< this->n_campos; i++)
		{
		add(this->campo[i]);
		}
	}

/**
 *
 */
COLUNAS::~COLUNAS()
	{
			
	}

PRINCIPAL::PRINCIPAL(): BANCOSL(DADOS)
	{
	Gtk::VBox *Central;
	Gtk::HBox *HAux, *HAux1;
	Gtk::VBox *VAux;
	Gtk::Frame *FAux;
	Gtk::Label *LAux;
	Gtk::ScrolledWindow *SW;
	Gtk::Notebook *NB;
	Gtk::VSeparator *SP;
	ponteiro_icon = Gdk::Pixbuf::create_from_xpm_data (clariondb_ico);

	total = pagina = paginas = opc_sql = 0;
	carregar_log = true;
	log1.open("log-geral.txt", ofstream::out | ofstream::app);
	//log1 << __FILE__ << ": " << __LINE__ << endl;
	dados_base();
	//log1 << __FILE__ << ": " << __LINE__ << endl;
	Tela = new Gtk::Window();

	Tela->set_title(Glib::ustring("Import Clarion to Firebird"));
	Tela->set_icon(ponteiro_icon);
	Tela->set_position(Gtk::WIN_POS_CENTER);
	//Tela->set_size_request (600,200);
	Tela->maximize ();
	Central = new Gtk::VBox(false,0);
	HAux = new Gtk::HBox(true,0);
	Central->pack_start(*HAux,false,false,0);
	menu_barra = Gtk::manage(new Gtk::MenuBar());
	HAux->pack_start(*menu_barra,true,true,0);
	//Sub-Menu Arquivos
		{
		Gtk::Menu::MenuList& menulist = MenuArquivo.items();
		menulist.push_back(MenuElem(Glib::ustring("_Configurar"),Gtk::AccelKey("<control>F"),sigc::bind<Gtk::Window*>(sigc::mem_fun(*this, &PRINCIPAL::configurar),Tela)));
		menulist.push_back(MenuElem(Glib::ustring("_Analise Importação"),Gtk::AccelKey("<control>I"),sigc::bind<Gtk::Window*>(sigc::mem_fun(*this, &PRINCIPAL::analise),Tela)));
		}
	//Sub-Menu Arquivos
		{
		Gtk::Menu::MenuList& menulist = MenuRelatorio.items();
		menulist.push_back(MenuElem(Glib::ustring("_Clientes"),Gtk::AccelKey("<control><shift>C"),sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::relatorio),1)));
		menulist.push_back(MenuElem(Glib::ustring("_Noivos"),Gtk::AccelKey("<control><shift>H"),sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::relatorio),2)));
		menulist.push_back(MenuElem(Glib::ustring("_Noivas"),Gtk::AccelKey("<control><alt>M"),sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::relatorio),3)));
		menulist.push_back(MenuElem(Glib::ustring("Casamen_tos"),Gtk::AccelKey("<control><alt>T"),sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::relatorio),4)));
		menulist.push_back(MenuElem(Glib::ustring("Na_scimentos"),Gtk::AccelKey("<control><alt>V"),sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::relatorio),5)));
		}
	menu_barra->items().push_back(MenuElem(Glib::ustring("_Arquivo"),Gtk::AccelKey("<alt>A"),this->MenuArquivo));
	menu_barra->items().push_back(MenuElem(Glib::ustring("_Relatório"),Gtk::AccelKey("<alt>R"),this->MenuRelatorio));

	//Dados
	HAux = new Gtk::HBox(false,0);
	Central->pack_start(*HAux,true,true,0);
	//Clarion
	FAux = new Gtk::Frame(Glib::ustring("Ações"));
	HAux->pack_start(*FAux,false,false,0);
	VAux = new Gtk::VBox(false,0);
	FAux->add(*VAux);
	HAux1 = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux1,false,false,0);
	B_SQL[0] = new Gtk::Button(Glib::ustring("Clientes"));
	HAux1->pack_start(*B_SQL[0],false,false,0);
	B_SQL[0]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),1));
	HAux1 = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux1,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Casamentos: "));
	HAux1->pack_start(*LAux,false,false,0);
	B_SQL[1] = new Gtk::Button(Glib::ustring("Noivo"));
	HAux1->pack_start(*B_SQL[1],false,false,0);
	B_SQL[1]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),2));
	B_Sync[0] = new Gtk::Button(Glib::ustring("S_Noivo"));
	HAux1->pack_start(*B_Sync[0],false,false,0);
	B_Sync[0]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::sincronizar),1));
	B_Sync[0]->set_sensitive(false);
	B_SQL[2] = new Gtk::Button(Glib::ustring("Noiva"));
	HAux1->pack_start(*B_SQL[2],false,false,0);
	B_Sync[1] = new Gtk::Button(Glib::ustring("S_Noiva"));
	HAux1->pack_start(*B_Sync[1],false,false,0);
	B_Sync[1]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::sincronizar),2));
	B_Sync[1]->set_sensitive(false);
	B_SQL[2]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),3));
	B_SQL[3] = new Gtk::Button(Glib::ustring("Casamento"));
	HAux1->pack_start(*B_SQL[3],false,false,0);
	B_Sync[2] = new Gtk::Button(Glib::ustring("S_Casamento"));
	HAux1->pack_start(*B_Sync[2],false,false,0);
	B_Sync[2]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::sincronizar),3));
	B_Sync[2]->set_sensitive(false);
	B_SQL[3]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),4));
	HAux1 = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux1,false,false,0);
	B_SQL[4] = new Gtk::Button(Glib::ustring("Nascimento"));
	HAux1->pack_start(*B_SQL[4],false,false,0);
	B_SQL[4]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),5));
	B_Sync[3] = new Gtk::Button(Glib::ustring("S_Nascimento"));
	HAux1->pack_start(*B_Sync[3],false,false,0);
	B_Sync[3]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::sincronizar),4));
	B_Sync[3]->set_sensitive(false);
	HAux1 = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux1,false,false,0);
	B_SQL[5] = new Gtk::Button(Glib::ustring("Obitos"));
	HAux1->pack_start(*B_SQL[5],false,false,0);
	B_SQL[5]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::gerar_sql),6));
	B_Sync[4] = new Gtk::Button(Glib::ustring("S_Obitos"));
	HAux1->pack_start(*B_Sync[4],false,false,0);
	B_Sync[4]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::sincronizar),5));
	B_Sync[4]->set_sensitive(true);
	HAux1 = new Gtk::HBox(false,0);
	//Firebird
	FAux = new Gtk::Frame("Resultado");
	HAux->pack_start(*FAux,true,true,0);
	NB = new Gtk::Notebook ();
	FAux->add(*NB);
	VAux = new Gtk::VBox(false,0);
	NB->append_page(*VAux,"SQL");
	SW = new Gtk::ScrolledWindow ();
	SW->set_policy (Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);
	TV_Result = new Gtk::TextView();
	BF_Result = TV_Result->get_buffer ();
	BF_Result->get_bounds (inicio,final);
	iter = BF_Result->erase(inicio,final);
	Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),1));
	SW->add(*TV_Result);
	VAux->pack_start(*SW,true,true,0);
	HAux1 = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux1,false,false,0);
	B_Aplicar = new Gtk::Button(Glib::ustring("..::Gravar SQL::.."));
	B_Aplicar->signal_clicked ().connect(sigc::mem_fun(*this,&PRINCIPAL::gravar_sql));
	HAux1->pack_start(*B_Aplicar,false,false,0);
	SP = new Gtk::VSeparator();
	HAux1->pack_start(*SP,false,false,0);
	Navegar[0] = new Gtk::Button(Gtk::Stock::GOTO_FIRST);
	Navegar[0]->signal_clicked().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::navegar),0));
	HAux1->pack_start(*Navegar[0],false,false,0);
	Navegar[1] = new Gtk::Button(Gtk::Stock::GO_BACK);
	Navegar[1]->signal_clicked().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::navegar),1));
	HAux1->pack_start(*Navegar[1],false,false,0);
	Texto_Nav = new Gtk::Label("");
	HAux1->pack_start(*Texto_Nav,false,false,0);
	Navegar[2] = new Gtk::Button(Gtk::Stock::GO_FORWARD);
	Navegar[2]->signal_clicked().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::navegar),2));
	HAux1->pack_start(*Navegar[2],false,false,0);
	Navegar[3] = new Gtk::Button(Gtk::Stock::GOTO_LAST);
	Navegar[3]->signal_clicked().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::navegar),3));
	HAux1->pack_start(*Navegar[3],false,false,0);
	VAux = new Gtk::VBox(false,0);
	NB->append_page(*VAux,"Logs");
	SW = new Gtk::ScrolledWindow ();
	SW->set_policy (Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);
	TV_Log = new Gtk::TextView();
	BF_Log = TV_Log->get_buffer ();
	BF_Log->get_bounds (l_inicio,l_final);
	l_iter = BF_Log->erase(l_inicio,l_final);
	Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
	SW->add(*TV_Log);
	VAux->pack_start(*SW,true,true,0);
	string status;
	status.clear();
	status = "Sombra® Designer Visual - ";
	status.append(data_formatada(hoje(),2));
	status += " - ";
	status.append(agora());
	statusbar = BarraStatus.push(Glib::ustring(status));
	Central->pack_end(BarraStatus,false,true,0);
	Tela->add(*Central);
	Tela->show_all();
	Glib::signal_timeout().connect(sigc::mem_fun(*this,&PRINCIPAL::relogio), 1000);
	}

PRINCIPAL::~PRINCIPAL()
	{
	string texto;
	log.open(arq_log.c_str());
	BF_Log = TV_Log->get_buffer();
	texto.clear();
	texto = BF_Log->get_text(); 
	log << texto << endl;
	log.close();
	carregar_log = false;
	log1.close();
	}

void PRINCIPAL::sincronizar(int tabela)
	{
	string SQL, coluna;
	char *sql;
	int j, colunas, r;
	vector<string> linha;
	vector<string>::iterator x;
	vector<vector<string> > dd;
	vector<vector<string> >::iterator i;
	
	arq_log.clear();
	arq_log = "log-sync.log";
	BF_Log = TV_Log->get_buffer ();
	l_iter = BF_Log->end();
	
	Clarion = new BANCOODBC(alias_clarion,user_clarion,senha_clarion);
	switch(tabela)
		{
		case 1:
			{
			SQL.clear();
			SQL = "select h.NOMHOM, h.NOMEHOMEMCASADO, h.NATHOM, h.DATHOM, h.PROHOM, h.ENDHOM, h.BAIHOM, h.ESTCHO, h.NACIONALIDADEHOMEM, h.PAIHOM, h.NATPHO, h.PROPHO, h.DADOPH, h.MAEHOM, h.NATMHO, h.PROMHO, h.DADOMH, h.RESPHO from CASAMENTO h order by h.NOMHOM";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			Clarion->executar(sql);
			delete sql;
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					colunas = Clarion->colunas;
					dd = Clarion->resultados;
					for (i = dd.begin(),r=0; i != dd.end(); ++i,r++)
						{
						linha = *i;
						SQL.clear();
						SQL = "insert into noivos (NOMHOM, NOMEHOMEMCASADO, NATHOM, DATHOM, PROHOM, ENDHOM, BAIHOM, ESTCHO, NACIONALIDADEHOMEM, PAIHOM, NATPHO, PROPHO, DADOPH, MAEHOM, NATMHO, PROMHO, DADOMH, RESPHO) values (";
						for (x = linha.begin(), j=0; x != linha.end(); ++x, j++)
							{
							coluna = *x;
							switch(j)
								{
								case 2:
								case 4:
								case 6:
								case 10:
								case 11:
								case 14:
								case 15:
									{
									SQL += coluna+",";
									break;
									}
								case 17:
									{
									SQL += "'"+coluna+"');";
									break;
									}
								default:
									{
									SQL += "'"+coluna+"',";
									break;
									}
								}
							}
						sql = new char[SQL.length()+1];
						strcpy(sql,SQL.c_str());
						executar(sql,1);
						delete sql;
						if (query_result == 3)
							{
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL + "\n"+mensagem+"\n"));
							}
						else
							{
							sql = new char[32];
							sprintf (sql,"%d de %d\n",(r+1), Clarion->registros);
							SQL.clear();
							SQL.append(sql);
							delete sql;
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*if (r > 5)
							{
							break;
							}*/
						}
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem+"\n"));
				}
			break;
			}
		case 2:
			{
			SQL.clear();
			SQL = "select m.NOMMUL, m.NOMCAS, m.NATMUL, m.DATMUL, m.PROMUL, m.ENDMUL, m.BAIMUL, m.ESTCMU, m.NACIONALIDADEMULHER,";
			SQL += "m.PAIMUL, m.DADOPM, m.MAEMUL, m.DADOMM, m.RESPMU ";
			SQL += "from CASAMENTO m ";
			SQL += "order by m.NOMMUL"; 
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			Clarion->executar(sql);
			delete sql;
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					colunas = Clarion->colunas;
					dd = Clarion->resultados;
					for (i = dd.begin(),r=0; i != dd.end(); ++i,r++)
						{
						linha = *i;
						SQL.clear();
						SQL = "insert into noivas (NOMMUL, NOMCAS, NATMUL, DATMUL, PROMUL, ENDMUL, BAIMUL, ESTCMU, NACIONALIDADEMULHER,PAIMUL, DADOPM, MAEMUL, DADOMM, RESPMU) values (";
						for (x = linha.begin(), j=0; x != linha.end(); ++x, j++)
							{
							coluna = *x;
							switch(j)
								{
								case 2:
								case 4:
								case 6:
									{
									SQL += coluna+",";
									break;
									}
								case 13:
									{
									SQL += "'"+coluna+"');";
									break;
									}
								default:
									{
									SQL += "'"+coluna+"',";
									break;
									}
								}
							}
						sql = new char[SQL.length()+1];
						strcpy(sql,SQL.c_str());
						executar(sql,1);
						delete sql;
						if (query_result == 3)
							{
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL + "\n"+mensagem+"\n"));
							}
						else
							{
							sql = new char[32];
							sprintf (sql,"%d de %d\n",(r+1), Clarion->registros);
							SQL.clear();
							SQL.append(sql);
							delete sql;
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*if (r > 5)
							{
							break;
							}*/
						}
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem+"\n"));
				}
			break;
			}
		case 3:
			{
			SQL.clear();
			SQL = "select TERMOX, LIVROX, FOLHAX, FRENTEVERSO, DATREG, OBSERV, HORAXX,  NOMHOM, NOMMUL, LOCALX, REGIME, JUIPAZ, TESTEM, LETLIV from CASAMENTO order by LIVROX, FOLHAX"; 
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			Clarion->executar(sql);
			delete sql;
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					colunas = Clarion->colunas;
					dd = Clarion->resultados;
					for (i = dd.begin(),r=0; i != dd.end(); ++i,r++)
						{
						linha = *i;
						SQL.clear();
						SQL = "insert into casamentos (TERMOX, LIVROX, FOLHAX, FRENTEVERSO, DATREG, OBSERV, HORAXX,  NOMHOM, NOMMUL, LOCALX, REGIME, JUIPAZ, TESTEM, LETLIV) values (";
						for (x = linha.begin(), j=0; x != linha.end(); ++x, j++)
							{
							coluna = *x;
							switch(j)
								{
								case 0:
								case 1:
								case 2:
								case 9:
								case 10:
									{
									SQL += coluna+",";
									break;
									}
								case 13:
									{
									SQL += "'"+coluna+"');";
									break;
									}
								default:
									{
									SQL += "'"+coluna+"',";
									break;
									}
								}
							}
						sql = new char[SQL.length()+1];
						strcpy(sql,SQL.c_str());
						executar(sql,1);
						delete sql;
						if (query_result == 3)
							{
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL + "\n"+mensagem+"\n"));
							}
						else
							{
							sql = new char[32];
							sprintf (sql,"%d de %d\n",(r+1), Clarion->registros);
							SQL.clear();
							SQL.append(sql);
							delete sql;
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*if (r > 5)
							{
							break;
							}*/
						}
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem+"\n"));
				}
			break;
			}
		case 4:
			{
			SQL.clear();
			SQL = "select SEQUEN, LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, DATAXX, HORAXX, ";
			SQL += "NOMPAI, PROPAI, NOMMAE, PROMAE, DATPAI, DATMAE, DECLAR, AVOPAT, AVAPAT, ";
			SQL += "AVOMAT, AVAMAT, OBSERV, LOCALX, DISTRITO, CASADOS ";
			SQL += "from NASCIMENTO order by LIVROX, FOLHAX";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			Clarion->executar(sql);
			delete sql;
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					colunas = Clarion->colunas;
					dd = Clarion->resultados;
					for (i = dd.begin(),r=0; i != dd.end(); ++i,r++)
						{
						linha = *i;
						SQL.clear();
						SQL = "insert into nascimentos (SEQUEN, LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, DATAXX, HORAXX, ";
						SQL += "NOMPAI, PROPAI, NOMMAE, PROMAE, DATPAI, DATMAE, DECLAR, AVOPAT, AVAPAT, ";
						SQL += "AVOMAT, AVAMAT, OBSERV, LOCALX, DISTRITO, CASADOS) values (";
						for (x = linha.begin(), j=0; x != linha.end(); ++x, j++)
							{
							coluna = *x;
							switch(j)
								{
								case 0:
								case 1:
								case 2:
								case 4:
								case 11:
								case 13:
								case 22:
								case 23:
									{
									SQL += coluna+",";
									break;
									}
								case 24:
									{
									SQL += "'"+coluna+"');";
									break;
									}
								default:
									{
									SQL += "'"+coluna+"',";
									break;
									}
								}
							}
						sql = new char[SQL.length()+1];
						strcpy(sql,SQL.c_str());
						executar(sql,1);
						delete sql;
						if (query_result == 3)
							{
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL + "\n"+mensagem+"\n"));
							}
						else
							{
							sql = new char[32];
							sprintf (sql,"%d de %d\n",(r+1), Clarion->registros);
							SQL.clear();
							SQL.append(sql);
							delete sql;
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*if (r > 5)
							{
							break;
							}*/
						}
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem+"\n"));
				}
			break;
			}
		case 5:
			{
			SQL.clear();
			SQL = "select SEQUEN, LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, ENDERE, BAIFAL, DATNAS, PROFIS, ESTCIV, ";
			SQL += "PAIXXX, PROPAI, MAEXXX, PROMAE, DECLAR, GRAUPARENTESCO, ESTADOCIVILDECLARANTE, NACIONALIDADEDECLARANTE, RGDECL, ";
			SQL += "EXPEDIDORCARTEIRADECLARANTE, UFCARTEIRADECLARANTE, PRODEC, RESDEC, BAIDEC, MEDICO, DATOBI, HOROBI, CAUMOR, OBSERV, ";
			SQL += "IDADEOBITO, TEMPO, TESTEM, FILHOS, ARROGO, TESTAMENTO, NATIMORTO ";
			SQL += "from FALECIDO order by LIVROX, FOLHAX";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			Clarion->executar(sql);
			delete sql;
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					colunas = Clarion->colunas;
					dd = Clarion->resultados;
					for (i = dd.begin(),r=0; i != dd.end(); ++i,r++)
						{
						linha = *i;
						SQL.clear();
						SQL = "insert into obitos (SEQUEN, LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, ENDERE, BAIFAL, DATNAS, PROFIS, ESTCIV, ";
						SQL += "PAIXX, PROPAI, MAEXX, PROMAE, DECLAR, GRAUPARENTESCO, ESTADOCIVILDECLARANTE, NACIONALIDADEDECLARANTE, RGDECL, ";
						SQL += "EXPEDIDORCARTEIRADECLARANTE, UFCARTEIRADECLARANTE, PRODEC, RESDEC, BAIDEC, MEDICO, DATOBI, HOROBI, CAUMOR, OBSERV, ";
						SQL += "IDADEOBITO, TEMPO, TESTEM, FILHOS, ARROGO, TESTAMENTO,NATIMORTO) values (";
						for (x = linha.begin(), j=0; x != linha.end(); ++x, j++)
							{
							coluna = *x;
							switch(j)
								{
								case 0:
								case 1:
								case 2:
								case 4:
								case 9:
								case 11:
								case 14:
								case 16:
								case 18:
								case 24:
								case 26:
								case 27:
								case 32:
									{
									SQL += coluna+",";
									break;
									}
								case 38:
									{
									SQL += "'"+coluna+"');";
									break;
									}
								default:
									{
									SQL += "'"+coluna+"',";
									break;
									}
								}
							}
						sql = new char[SQL.length()+1];
						strcpy(sql,SQL.c_str());
						executar(sql,1);
						delete sql;
						if (query_result == 3)
							{
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL + "\n"+mensagem+"\n"));
							}
						else
							{
							sql = new char[32];
							sprintf (sql,"%d de %d\n",(r+1), Clarion->registros);
							SQL.clear();
							SQL.append(sql);
							delete sql;
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*if (r > 5)
							{
							break;
							}*/
						}
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem+"\n"));
				}
			break;
			}
		}
	delete Clarion;
	}
void PRINCIPAL::gravar_sql()
	{
	string texto;
	int resultado;
	
	Gtk::FileChooserDialog dialog("Salvar SQL", Gtk::FILE_CHOOSER_ACTION_SAVE);
	dialog.set_icon(ponteiro_icon);
	dialog.add_button (Gtk::Stock::SAVE,Gtk::RESPONSE_OK);
	dialog.add_button (Gtk::Stock::CANCEL,Gtk::RESPONSE_CANCEL);
	dialog.set_current_name (arq_sql);
	resultado = dialog.run();
	switch(resultado)
  		{
  		case(Gtk::RESPONSE_OK):
			{
			arq_sql.clear();
			arq_sql = dialog.get_filename();
			arquivo.open(arq_sql.c_str());
			BF_Result = TV_Result->get_buffer();
			texto.clear();
			texto = BF_Result->get_text();
			texto = Glib::convert(texto, "ISO-8859-1","UTF-8");
			arquivo << texto << endl;
			arquivo.close();
			}
		case(Gtk::RESPONSE_CANCEL):
			{
		 	break;
			}
		default:
			{
		  	cout << "Unexpected button clicked." <<endl;
		  	break;
	   	 	}
		}
	}

void PRINCIPAL::configurar(Gtk::Window *j)
	{
	Gtk::VBox *Central, *VAux;
	Gtk::HBox *HAux;
	Gtk::Label *LAux;
	Gtk::Frame *FAux;
	Gtk::Button *BTest;
	Configurar =  new Gtk::Window();
	Configurar->signal_show ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::dados_conf),0));
	Configurar->set_title(Glib::ustring("..::Configuração::.."));
	Configurar->set_icon(ponteiro_icon);
	Configurar->set_transient_for (*j);
	Central = new Gtk::VBox(false,0);
	Configurar->add(*Central);
	HAux = new Gtk::HBox(false,0);
	LAux = new Gtk::Label(Glib::ustring("Código:\t"+codigo_conf));
	HAux->pack_start(*LAux,false,false,0);
	Central->pack_start(*HAux,false,false,0);
	FAux = new Gtk::Frame(Glib::ustring("Dados Clarion"));
	VAux = new Gtk::VBox(false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Alias:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_Alias_Clarion = new Gtk::Entry();
	HAux->pack_start(*E_Alias_Clarion,false,false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Usuário:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_User_Clarion = new Gtk::Entry();
	HAux->pack_start(*E_User_Clarion,false,false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Senha:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_Senha_Clarion = new Gtk::Entry();
	HAux->pack_start(*E_Senha_Clarion,false,false,0);
	BTest = new Gtk::Button(Glib::ustring("Testar Clarion"));
	BTest->signal_clicked ().connect(sigc::bind<int,Gtk::Window *>(sigc::mem_fun(*this,&PRINCIPAL::testar_conecao),1,Configurar));
	BTest->set_size_request (80,-1);
	VAux->pack_start(*BTest,false,false,0);
	FAux->add(*VAux);
	Central->pack_start(*FAux,false,false,0);
	BTest = new Gtk::Button(Glib::ustring("Salvar Clarion"));
	BTest->signal_clicked ().connect(sigc::bind<int,Gtk::Window *>(sigc::mem_fun(*this,&PRINCIPAL::salvar),1,Configurar));
	BTest->set_size_request (80,-1);
	Central->pack_start(*BTest,false,false,0);
	FAux = new Gtk::Frame(Glib::ustring("Dados Firebird"));
	VAux = new Gtk::VBox(false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Alias:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_Alias_Firebird = new Gtk::Entry();
	HAux->pack_start(*E_Alias_Firebird,false,false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Usuário:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_User_Firebird = new Gtk::Entry();
	HAux->pack_start(*E_User_Firebird,false,false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	LAux = new Gtk::Label(Glib::ustring("Senha:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_Senha_Firebird = new Gtk::Entry();
	HAux->pack_start(*E_Senha_Firebird,false,false,0);
	BTest = new Gtk::Button(Glib::ustring("Testar Firebird"));
	BTest->signal_clicked ().connect(sigc::bind<int,Gtk::Window *>(sigc::mem_fun(*this,&PRINCIPAL::testar_conecao),2,Configurar));
	BTest->set_size_request (80,-1);
	VAux->pack_start(*BTest,false,false,0);
	FAux->add(*VAux);
	Central->pack_start(*FAux,false,false,0);
	BTest = new Gtk::Button(Glib::ustring("Salvar Firebird"));
	BTest->signal_clicked ().connect(sigc::bind<int,Gtk::Window *>(sigc::mem_fun(*this,&PRINCIPAL::salvar),2,Configurar));
	BTest->set_size_request (80,-1);
	Central->pack_start(*BTest,false,false,0);
	FAux = new Gtk::Frame(Glib::ustring("Gerais"));
	Central->pack_start(*FAux,false,false,0);
	HAux = new Gtk::HBox(false,0);
	FAux->add(*HAux);
	LAux = new Gtk::Label(Glib::ustring("Paginação:\t"));
	HAux->pack_start(*LAux,false,false,0);
	E_Paginacao = new Gtk::Entry();
	HAux->pack_start(*E_Paginacao,false,false,0);
	BTest = new Gtk::Button(Glib::ustring("Salvar Páginação"));
	BTest->signal_clicked ().connect(sigc::bind<int,Gtk::Window *>(sigc::mem_fun(*this,&PRINCIPAL::salvar),3,Configurar));
	BTest->set_size_request (80,-1);
	HAux->pack_start(*BTest,false,false,0);
	Configurar->show_all();

	Gtk::Main::run(*Configurar);
	}

void PRINCIPAL::analise (Gtk::Window *j)
	{
	Gtk::VBox *Central, *VAux;
	Gtk::HBox *HAux;
	Gtk::Label *LAux;
	Gtk::Frame *FAux;
	Gtk::ScrolledWindow *SW;
	Analisar =  new Gtk::Window();
	//Analisar->signal_show ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::dados_conf),0));
	Analisar->set_title(Glib::ustring("..::Análise de Importação::.."));
	Analisar->set_icon(ponteiro_icon);
	Analisar->set_transient_for (*j);
	Analisar->maximize ();
	Central = new Gtk::VBox(false,0);
	Analisar->add(*Central);
	FAux = new Gtk::Frame(Glib::ustring("Dados"));
	VAux = new Gtk::VBox(false,0);
	HAux = new Gtk::HBox(false,0);
	VAux->pack_start(*HAux,false,false,0);
	B_Analise[0] = new Gtk::Button(Glib::ustring("Clientes"));
	B_Analise[0]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::verificar),1));
	HAux->pack_start(*B_Analise[0],false,false,0);
	B_Analise[1] = new Gtk::Button(Glib::ustring("Noivos"));
	B_Analise[1]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::verificar),2));
	HAux->pack_start(*B_Analise[1],false,false,0);
	B_Analise[2] = new Gtk::Button(Glib::ustring("Noivas"));
	B_Analise[2]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::verificar),3));
	HAux->pack_start(*B_Analise[2],false,false,0);
	B_Analise[3] = new Gtk::Button(Glib::ustring("Casamentos"));
//	B_Analise[3]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::verificar),4));
	HAux->pack_start(*B_Analise[3],false,false,0);
	B_Analise[4] = new Gtk::Button(Glib::ustring("Nascimentos"));
	B_Analise[4]->signal_clicked ().connect(sigc::bind<int>(sigc::mem_fun(*this,&PRINCIPAL::verificar),5));
	HAux->pack_start(*B_Analise[4],false,false,0);
	FAux->add(*VAux);
	Central->pack_start(*FAux,false,false,0);
	FAux = new Gtk::Frame(Glib::ustring("Teste de Inserção"));
	Central->pack_start(*FAux,true,true,0);
	SW = new Gtk::ScrolledWindow ();
	SW->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
	FAux->add(*SW);
	TrVAnalise =  new Gtk::TreeView ();
	SW->add(*TrVAnalise);
	Analisar->show_all();

	Gtk::Main::run(*Analisar);
	
	}

void PRINCIPAL::dados_conf(int con)
	{
	char *aux;
	string AUX;
	switch(con)
		{
		case 0:
			{
			E_Alias_Clarion->set_text (Glib::ustring(alias_clarion));
			E_User_Clarion->set_text (Glib::ustring(user_clarion));
			E_Senha_Clarion->set_text (Glib::ustring(senha_clarion));
			E_Alias_Firebird->set_text (Glib::ustring(alias_firebird));
			E_User_Firebird->set_text (Glib::ustring(user_firebird));
			E_Senha_Firebird->set_text (Glib::ustring(senha_firebird));
			aux = new char[32];
			sprintf (aux,"%d",paginacao);
			AUX.clear();
			AUX.append(aux);
			delete aux;
			E_Paginacao->set_text (Glib::ustring(AUX));
			break;
			}
		case 1:
			{
			E_Alias_Clarion->set_text (Glib::ustring(alias_clarion));
			E_User_Clarion->set_text (Glib::ustring(user_clarion));
			E_Senha_Clarion->set_text (Glib::ustring(senha_clarion));
			break;
			}
		case 2:
			{
			E_Alias_Firebird->set_text (Glib::ustring(alias_firebird));
			E_User_Firebird->set_text (Glib::ustring(user_firebird));
			E_Senha_Firebird->set_text (Glib::ustring(senha_firebird));
			break;
			}
		case 3:
			{
			aux = new char[32];
			sprintf (aux,"%d",paginacao);
			AUX.clear();
			AUX.append(aux);
			delete aux;
			E_Paginacao->set_text (Glib::ustring(AUX));
			break;
			}
		}
	}

/**
 * Este método é executado a cada segundo para atualizar a hora do relógio na
 * PRINCIPAL::BarraStatus.
 */
bool PRINCIPAL::relogio()
	{
	string status;
	status.clear();
	status = "Sombra® Designer Visual - ";
	status.append(data_formatada(hoje(),2));
	status += " - ";
	status.append(agora());
	statusbar = BarraStatus.push(Glib::ustring(status));
	return true;
	}

void PRINCIPAL::dados_base ()
	{
	string SQL;
	char *sql;
	int reg;
	vector<string> linha;
	vector<vector<string> > dd;
	vector<vector<string> >::iterator i;

	//Configuração ODBC
	log1 << __FILE__ << ": " << __LINE__ << endl;
	SQL.clear();
	SQL = "select * from configuracao where id=1";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	executar(sql,2);
	log1 << __FILE__ << ": " << __LINE__ << endl;
	delete sql;
	if (query_result != 3)
		{
		log1 << __FILE__ << ": " << __LINE__ << endl;
		if (registros > 0)
			{
			log1 << __FILE__ << ": " << __LINE__ << endl;
			dd = resultados;
			linha = dd.at(0);
			codigo_conf.clear();
			codigo_conf =  linha.at(0);
			alias_clarion.clear();
			alias_clarion = linha.at(1);
			user_clarion.clear();
			user_clarion = linha.at(2);
			senha_clarion.clear();
			senha_clarion = linha.at(3);
			alias_firebird.clear();
			alias_firebird = linha.at(4);
			user_firebird.clear();
			user_firebird = linha.at(5);
			senha_firebird.clear();
			senha_firebird = linha.at(6);
			log1 << __FILE__ << ": " << __LINE__ << endl;
			paginacao = atoi(linha.at(7).c_str());
			log1 << __FILE__ << ": " << __LINE__ << endl;
			}
		}
	else
		{
		log1 << mensagem << endl;
		}
	log1 << __FILE__ << ": " << __LINE__ << endl;
	//Regimes de Casamento
	SQL.clear();
	SQL = "select * from regime_aux order by id";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	executar(sql,2);
	log1 << __FILE__ << ": " << __LINE__ << endl;
	delete sql;
	if (query_result != 3)
		{
		if (registros > 0)
			{
			total_regimes = registros;
			regimes = new REG_AUX[total_regimes];
			dd = resultados;
			for (i = dd.begin(),reg=0; i != dd.end(); ++i, reg++)
				{
				linha = *i;
				regimes[reg].tipo = atoi(linha.at(0).c_str());
				regimes[reg].dado.clear();
				regimes[reg].dado = linha.at(1);
				}
			}
		}
	else
		{
		log1 << mensagem << endl;
		}
	log1 << __FILE__ << ": " << __LINE__ << endl;
	//Inserindo dados de estados Civis
	EST_CIV aux;
	aux.dado = "";
	aux.codigo = "0";
	estado_civil.clear();
	estado_civil.push_back(aux);
	aux.dado = "(menor)";
	aux.codigo = "1";
	estado_civil.push_back(aux);
	aux.dado = "1";
	aux.codigo = "1";
	estado_civil.push_back(aux);
	aux.dado = "2";
	aux.codigo = "2";
	estado_civil.push_back(aux);
	aux.dado = "3";
	aux.codigo = "3";
	estado_civil.push_back(aux);
	aux.dado = "casado";
	aux.codigo = "2";
	estado_civil.push_back(aux);
	aux.dado = "casada";
	aux.codigo = "2";
	estado_civil.push_back(aux);
	aux.dado = "desquitada";
	aux.codigo = "7";
	estado_civil.push_back(aux);
	aux.dado = "desquitado";
	aux.codigo = "7";
	estado_civil.push_back(aux);
	aux.dado = "divorciada";
	aux.codigo = "6";
	estado_civil.push_back(aux);
	aux.dado = "divorciado";
	aux.codigo = "6";
	estado_civil.push_back(aux);
	aux.dado = "ignorada";
	aux.codigo = "9";
	estado_civil.push_back(aux);
	aux.dado = "ignorado";
	aux.codigo = "9";
	estado_civil.push_back(aux);
	aux.dado = "separada judicialmen";
	aux.codigo = "4";
	estado_civil.push_back(aux);
	aux.dado = "separada judicialmente";
	aux.codigo = "4";
	estado_civil.push_back(aux);
	aux.dado = "separado judicialmen";
	aux.codigo = "4";
	estado_civil.push_back(aux);
	aux.dado = "separado judicialmente";
	aux.codigo = "4";
	estado_civil.push_back(aux);
	aux.dado = "solteira";
	aux.codigo = "1";
	estado_civil.push_back(aux);
	aux.dado = "solteiro";
	aux.codigo = "1";
	estado_civil.push_back(aux);
	aux.dado = "viúva";
	aux.codigo = "3";
	estado_civil.push_back(aux);
	aux.dado = "viúvo";
	aux.codigo = "3";
	estado_civil.push_back(aux);
	}

string PRINCIPAL::get_regimes (string codigo)
	{
	int i, cod;
	cod = atoi(codigo.c_str());
	for (i=0; i < total_regimes; i++)
		{
		if (regimes[i].tipo == cod)
			{
			break;
			}
		}
	if (i >= total_regimes)
		{
		return string("P");
		}
	else
		{
		return regimes[i].dado;
		}
	}

void PRINCIPAL::testar_conecao (int con, Gtk::Window *j)
	{
	string alias, user, senha, msg;
	bool t_conectado;
	int resp;
	Gtk::MessageDialog *teste;

	t_conectado = false;
	switch(con)
		{
		case 1:
			{
			alias.clear();
			alias = E_Alias_Clarion->get_text();
			user.clear();
			user = E_User_Clarion->get_text();
			senha.clear();
			senha = E_Senha_Clarion->get_text();
			Clarion = new BANCOODBC(alias,user,senha);
			t_conectado = Clarion->conectado;
			msg.clear();
			msg = Clarion->mensagem;
			delete Clarion;
			break;
			}
		case 2:
			{
			alias.clear();
			alias = E_Alias_Firebird->get_text();
			user.clear();
			user = E_User_Firebird->get_text();
			senha.clear();
			senha = E_Senha_Firebird->get_text();
			Firebird = new BANCOODBC(alias,user,senha);
			t_conectado = Firebird->conectado;
			msg.clear();
			msg = Firebird->mensagem;
			delete Firebird;
			break;
			}
		}
	if (t_conectado)
		{
		teste = new Gtk::MessageDialog(*j,Glib::ustring("Teste Coneção"),false,Gtk::MESSAGE_INFO);
		}
	else
		{
		teste = new Gtk::MessageDialog(*j,Glib::ustring("Teste Coneção"),false,Gtk::MESSAGE_ERROR);
		}
	teste->set_secondary_text (Glib::ustring(msg));

	resp = teste->run();
	switch(resp)
		{
		case Gtk::RESPONSE_OK:
			{
			break;
			}
		}
	teste->hide();
	}

void PRINCIPAL::salvar (int con,Gtk::Window *j)
	{
	string SQL;
	char *sql;
	string alias, user, senha, msg, aux;
	int pag;

	SQL.clear();
	SQL = "update configuracao set ";
	switch(con)
		{
		case 1:
			{
			alias.clear();
			alias = E_Alias_Clarion->get_text();
			user.clear();
			user = E_User_Clarion->get_text();
			senha.clear();
			senha = E_Senha_Clarion->get_text();
			SQL += "alias_clarion='"+alias+"',";
			SQL += "user_clarion='"+user+"',";
			SQL += "senha_clarion='"+senha+"'";
			break;
			}
		case 2:
			{
			alias.clear();
			alias = E_Alias_Firebird->get_text();
			user.clear();
			user = E_User_Firebird->get_text();
			senha.clear();
			senha = E_Senha_Firebird->get_text();
			SQL += "alias_firebird='"+alias+"',";
			SQL += "user_firebird='"+user+"',";
			SQL += "senha_firebird='"+senha+"' ";
			break;
			}
		case 3:
			{
			aux.clear();
			aux = E_Paginacao->get_text();
			paginacao = atoi(aux.c_str());
			SQL += "paginacao="+aux+" ";
			break;
			}
		}
	SQL += "where id="+codigo_conf;
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	executar(sql,1);
	if (query_result == 3)
		{
		Gtk::MessageDialog salvei(*j,Glib::ustring("Falha Salvamento"),false,Gtk::MESSAGE_ERROR);
		salvei.set_secondary_text (Glib::ustring(mensagem));
		salvei.run();
		int resp = salvei.run();
		switch(resp)
			{
			case Gtk::RESPONSE_OK:
				{
				break;
				}
			}
		salvei.hide();
		}
	else
		{
		dados_base();
		dados_conf(con);
		}
	}

void PRINCIPAL::gerar_sql(int tabela)
	{
	string SQL, AUX, noivo, noiva;
	char *sql, *s_tempo, *aux;
	unsigned long int tempo, i, processos, cr, cnr;
	size_t pos;
	vector<string> linha_c, linha_f;
	vector<string>::iterator x_c, x_f;
	vector<vector<string> > dd_c, dd_f;
	vector<vector<string> >::iterator i_c, i_f;
	
	tempo = time(NULL);
	s_tempo = new char[32];
	sprintf(s_tempo,"%ld",tempo);
	arq_log.clear();
	arq_log = "log-";
	arq_log.append(s_tempo);
	arq_log += ".log";
	Clarion = new BANCOODBC(alias_clarion,user_clarion,senha_clarion);
	Firebird = new BANCOODBC(alias_firebird,user_firebird,senha_firebird);
	BF_Result = TV_Result->get_buffer ();
	BF_Result->get_bounds (inicio,final);
	iter = BF_Result->erase(inicio,final);
	BF_Log = TV_Log->get_buffer ();
	l_iter = BF_Log->end();
	switch(tabela)
		{
		case 1:
			{
			arq_sql.clear();
			arq_sql = "Clientes.sql";
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Clientes\n"));
			SQL.clear();
			//                0     1        2                 3                  4                   5                                6             7     
			SQL = "select c.CODIGO, c.NOME, c.SEXO, c.ESTADOCIVIL, c.DATANASCIMENTO, c.CARTEIRAIDENTIDADE, c.ORGAOEXPEDIDORCARTEIRAIDENTIDADE, c.UFCARTEIRAIDENTIDADE, ";
			//            8           9                 10         11        12           13           14               15            16           
			SQL += "c.PROFISSAO, c.CPFCNPJ, c.INSCRICAOESTADUAL, c.ENDERECO, c.BAIRRO, c.CEP, c.REGIMECASAMENTO, c.DATACASAMENTO, c.ANTERIORPOSTERIORALEI, ";
			//          17          18             19               20         21      
			SQL += "c.CONJUGE, c.FILIACAO$1, c.FILIACAO$2, c.NACIONALIDADE, c.NATURALIDADE ";
			SQL += "from CLIENTES c ";
			SQL += "order by c.CODIGO";
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			Clarion->executar(sql);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (Clarion->query_result != 3)
				{
				if (Clarion->registros > 0)
					{
					cr = cnr = 0;
					//arquivo.open("Clientes.sql");
					dd_c = Clarion->resultados;
					//arquivo << "-- Registros: " << Clarion->registros << endl;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",Clarion->registros);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					//processos = Clarion->registros/100;
					//processos = 10;
					//omp_set_num_threads(processos);
					//#pragma parallel for
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						SQL.clear();
						SQL = "INSERT INTO CLIENTE (CODCLIENTE,NOME,SEXO,DATANASCIMENTO,IDENTIDADE,DATAEXPEDICAORG,ORGAOEMISSOR_RG,";
						SQL += "PROFISSAO,CPF,TIPOCLIENTE,OUTRODOCUMENTO,CNPJ,ENDERECO,BAIRRO,CEP,REGIMECASAMENTO,DATACASAMENTO,ANTERIORLEI,";
						SQL += "NOMEPAI,NOMEMAE,CODCLIENTE_1,CODNACAO,CODCIDADE,CODCIDADE_1)";
						SQL += "VALUES (GEN_ID(CODCLIENTE_GEN,1),'"+linha_c.at(1)+"',";
						AUX.clear();
						AUX = linha_c.at(1);
						SQL += "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						AUX.clear();
						AUX = linha_c.at(3);
						SQL += "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						AUX.clear();
						AUX = linha_c.at(4);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL += AUX+ ",";
						SQL += "'"+linha_c.at(5)+"',null,";
						SQL += "'"+org_exp(Clarion,linha_c.at(6))+"/"+linha_c.at(7)+"',";
						SQL += profissao(Clarion,linha_c.at(8))+",";
						AUX.clear();
						pos = linha_c.at(9).find(".");
						AUX = t_cpf_cnpj (linha_c.at(9).substr(0,pos));
						if (cpf)
							{
							SQL += "'"+AUX+"','F','"+linha_c.at(10)+"',null,";
							}
						else
							{
							SQL += "null,'J','"+linha_c.at(10)+"','"+AUX+"',";
							}
						SQL += "'"+linha_c.at(11)+"',";
						SQL += "'"+bairro(Clarion,linha_c.at(12))+"',";
						SQL += "'"+linha_c.at(13)+"',";
						SQL += "'"+get_regimes (linha_c.at(14))+"',";
						AUX.clear();
						AUX = linha_c.at(15);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL += AUX+ ",";
						AUX.clear();
						AUX = linha_c.at(16);
						SQL += "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						SQL += "'"+linha_c.at(18)+"',";
						SQL += "'"+linha_c.at(19)+"',";
						SQL += conjuge(Clarion,Firebird,linha_c.at(17))+",";
						SQL += nacao(Clarion,Firebird,linha_c.at(20))+",";
						SQL += cidade(Clarion,Firebird,cod_cidade)+",";
						SQL += cidade(Clarion,Firebird,linha_c.at(21));
						
						SQL += ");";
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (nome_sistema(Firebird,linha_c.at(0)))
							{
							cr++;
							//arquivo << SQL << endl;
							/*sql = new char[SQL.length()+1];
							strcpy(sql,SQL.c_str());
							Firebird->executar(sql);
							delete sql;
							if (Firebird->query_result == 3)
								{*/
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							/*	break;
								}
							else
								{
								SQL += " - OK\n";
								iter = BF_Result->insert(iter,Glib::ustring(SQL));
								}*/
							if (cr > 5)
								{
								break;
								}
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"CLIENTE",Glib::convert(linha_c.at(1), "UTF-8", "ISO-8859-1"));
							SQL += "\n";
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
						if ( i == 5)
							{
							break;
							}
						}
//					TV_Result->set_buffer(BF_Result);
					aux = new char[100];
					sprintf(aux,"\nTotal: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem));
				}
			//TV_Log->set_buffer (BF_Log);
			break;
			}
		case 2:
			{
			if (opc_sql != 2)
				{
				pagina = 0;
				SQL.clear();
				SQL = "select * from noivos where cod_firebird is null";
				sql = new char[SQL.length()+1];
				strcpy(sql,SQL.c_str());
				executar(sql,2);
				delete sql;
				if (query_result != 3)
					{
					total = registros;
					}
				if (total > 0)
					{
					paginas = (int) ceilf((float)total/paginacao);
					}
				}
			opc_sql = 2;
			r_inicio = pagina*paginacao;
			arq_sql.clear();
			arq_sql = "Noivos-";
			aux = new char[32];
			sprintf (aux,"%d-de-%d",pagina+1,paginas);
			arq_sql.append(aux);
			Texto_Nav->set_label(Glib::ustring(aux));
			delete aux;
			arq_sql += ".sql";
			//Casamentos - Noivos
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Casamentos - Noivo\n"));
			SQL.clear();
			//              0          1              2       3       4       5      6       7            8
			SQL = "select NOMHOM, NOMEHOMEMCASADO, NATHOM, DATHOM, PROHOM, ENDHOM, BAIHOM, ESTCHO, NACIONALIDADEHOMEM, ";
			//         9      10      11     12      13      14      15       16     17   
			SQL += "PAIHOM, NATPHO, PROPHO, DADOPH, MAEHOM, NATMHO, PROMHO, DADOMH, RESPHO ";
			SQL += "from noivos where cod_firebird is null ";
			SQL += "order by NOMHOM limit ";
			aux = new char[32];
			sprintf (aux,"%d,%d",r_inicio,paginacao);
			SQL.append(aux);
			delete aux;
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			//Clarion->executar(sql);
			executar(sql,2);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					cr = cnr = 0;
					dd_c = resultados;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",total);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					//processos = 10;
					//omp_set_num_threads(processos);
					//#pragma parallel for
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						//linha_c = dd_c.at(0);
						SQL.clear();
						SQL = "insert into NOIVO (CODNOIVO,NOMENOIVO,NOVONOMENOIVO,PROFISSAO,";
						SQL+= "ESTADOCIVILNOIVO,ENDERECO,BAIRRO,CODCIDADE,CODNACAO,CODCIDADE_1,DATANASC,NOMEPAI,";
						SQL+= "PROFISSAOPAI,CODCIDADE_3,NOMEMAE,PROFISSAOMAE,CODCIDADE_5,CONSENTIMENTOPAI,CONSENTIMENTOMAE) ";
						SQL+= "values (GEN_ID(CODNOIVO_GEN,1),";
						SQL+= "'"+linha_c.at(0)+"','"+linha_c.at(1)+"',";
						SQL+= profissao(Clarion,linha_c.at(4))+",";
						AUX.clear();
						AUX = linha_c.at(7);
						SQL+= "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						SQL+= "'"+linha_c.at(5)+"',";
						SQL+= "'"+bairro(Clarion,linha_c.at(6))+"',";
						SQL+= cidade(Clarion,Firebird,cod_cidade)+",";
						SQL+= nacao(Clarion,Firebird,linha_c.at(8))+",";
						SQL+= cidade(Clarion,Firebird,linha_c.at(2))+",";
						AUX.clear();
						AUX = linha_c.at(3);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+ ",";
						SQL+= "'"+linha_c.at(9)+"',";
						SQL+= profissao(Clarion,linha_c.at(11))+",";
						SQL+= cidade(Clarion,Firebird,linha_c.at(10))+",";
						SQL+= "'"+linha_c.at(13)+"',";
						SQL+= profissao(Clarion,linha_c.at(15))+",";
						SQL+= cidade(Clarion,Firebird,linha_c.at(14));
						SQL+= ",'N','N');";
						//AUX.clear();
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (!noivo_sistema(Firebird,linha_c.at(0)))
							{
							cr++;
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							/*if (cr > 5)
								{
								break;
								}*/
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"NOIVO",Glib::convert(linha_c.at(0), "UTF-8", "ISO-8859-1"));
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
						/*if (i == 20)
							{
							break;
							}*/
						}
//					TV_Result->set_buffer(BF_Result);
					aux = new char[100];
					sprintf(aux,"\ncommit;\n--Total: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(mensagem));
				}
//			TV_Log->set_buffer (BF_Log);
			break;
			}
		case 3:
			{
			if (opc_sql != 3)
				{
				pagina = 0;
				SQL.clear();
				SQL = "select * from noivas where cod_firebird is null";
				sql = new char[SQL.length()+1];
				strcpy(sql,SQL.c_str());
				executar(sql,2);
				delete sql;
				if (query_result != 3)
					{
					total = registros;
					}
				if (total > 0)
					{
					paginas = (int) ceilf((float)total/paginacao);
					}
				}
			opc_sql = 3;
			r_inicio = pagina*paginacao;
			arq_sql.clear();
			arq_sql = "Noivas-";
			aux = new char[32];
			sprintf (aux,"%d-de-%d",pagina+1,paginas);
			arq_sql.append(aux);
			Texto_Nav->set_label(Glib::ustring(aux));
			delete aux;
			arq_sql += ".sql";
			//Casamentos - Noiva
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Casamentos - Noiva\n"));
			SQL.clear();
			//               0      1       2       3        4      5       6       7         8
			SQL = "select NOMMUL, NOMCAS, NATMUL, DATMUL, PROMUL, ENDMUL, BAIMUL, ESTCMU, NACIONALIDADEMULHER,";
			//         9      10      11     12      13         
			SQL += "PAIMUL, DADOPM, MAEMUL, DADOMM, RESPMU ";
			SQL += "from noivas where cod_firebird is null ";
			//SQL += "where h.NOMHOM=m.NOMHOM ";
			SQL += "order by NOMMUL limit "; 
			aux = new char[32];
			sprintf (aux,"%d,%d",r_inicio,paginacao);
			SQL.append(aux);
			delete aux;
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			executar(sql,2);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					cr = cnr = 0;
					dd_c = resultados;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",total);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						//linha_c = dd_c.at(1);
						SQL.clear();
						SQL = "insert into NOIVA (CODNOIVA,NOMENOIVA,NOVONOMENOIVA,PROFISSAO,";
						SQL+= "ESTADOCIVILNOIVA,ENDERECO,BAIRRO,CODCIDADE,CODNACAO,CODCIDADE_1,DATANASC,NOMEPAI,NOMEMAE,CONSENTIMENTOPAI,CONSENTIMENTOMAE,CODCIDADE_5) ";
						SQL+= "values (GEN_ID(CODNOIVA_GEN,1),";
						SQL+= "'"+linha_c.at(0)+"','"+linha_c.at(1)+"',";
						SQL+= profissao(Clarion,linha_c.at(4))+",";
						AUX.clear();
						AUX = linha_c.at(7);
						SQL+= "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						SQL+= "'"+linha_c.at(5)+"',";
						SQL+= "'"+bairro(Clarion,linha_c.at(6))+"',";
						SQL+= cidade(Clarion,Firebird,cod_cidade)+",";
						SQL+= nacao(Clarion,Firebird,linha_c.at(8))+",";
						SQL+= cidade(Clarion,Firebird,linha_c.at(2))+",";
						AUX.clear();
						AUX = linha_c.at(3);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+ ",";
						SQL+= "'"+linha_c.at(9)+"',";
						SQL+= "'"+linha_c.at(11)+"','N','N',1);";
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (!noiva_sistema(Firebird,linha_c.at(0)))
							{
							cr++;
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"NOIVA",Glib::convert(linha_c.at(0), "UTF-8", "ISO-8859-1"));
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
						/*if (i == 20)
							{
							break;
							}*/						
						}
//					TV_Result->set_buffer(BF_Result);
					aux = new char[100];
					sprintf(aux,"\ncommit;\n--Total: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(mensagem));
				}
//			TV_Log->set_buffer (BF_Log);
			break;
			}
		case 4:
			{
			if (opc_sql != 4)
				{
				pagina = 0;
				SQL.clear();
				SQL = "select * from casamentos where cod_firebird is null";
				sql = new char[SQL.length()+1];
				strcpy(sql,SQL.c_str());
				executar(sql,2);
				delete sql;
				if (query_result != 3)
					{
					total = registros;
					}
				if (total > 0)
					{
					paginas = (int) ceilf((float)total/paginacao);
					}
				}
			opc_sql = 4;
			r_inicio = pagina*paginacao;
			arq_sql.clear();
			arq_sql = "Casamentos-";
			aux = new char[32];
			sprintf (aux,"%d-de-%d",r_inicio+1,paginas);
			arq_sql.append(aux);
			Texto_Nav->set_label(Glib::ustring(aux));
			delete aux;
			arq_sql += ".sql";
			//Casamentos
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Casamentos\n"));
			SQL.clear();
			//               0       1      2       3            4         5       6         7     8      
			SQL = "select TERMOX, LIVROX, FOLHAX, FRENTEVERSO, DATREG, OBSERV, HORAXX,  NOMHOM, NOMMUL, ";
			//         9       10     11     12      13
			SQL += "LOCALX, REGIME, JUIPAZ, TESTEM, LETLIV ";
			SQL += "from CASAMENTOS where cod_firebird is null ";
			SQL += "order by LIVROX, FOLHAX limit "; 
			aux = new char[32];
			sprintf (aux,"%d,%d",r_inicio,paginacao);
			SQL.append(aux);
			delete aux; 
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			executar(sql,2);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					cr = cnr = 0;
					dd_c = resultados;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",total);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						//linha_c = dd_c.at(1);
						SQL.clear();
						SQL = "insert into CASAMENTO (PROCESSO,LIVROCASAMENTO,FOLHACASAMENTO,FRENTEVERSO,";
						SQL+= "ORDEMCASAMENTO,DATAREGISTRO,DATAPROCESSO,OBSERVACAO,IGREJA,REGIMEDEBENS,CELEBRANTE,";
						SQL+= "TESTEMUNHAS,CODNOIVO,CODNOIVA,CODCIDADE,LETRA_LIVRO";
						//SQL+= "
						//SQL+= "values (GEN_ID(CODPROCESSO_GEN,1),";
						SQL+= ") values ("+linha_c.at(0)+"00,";
						SQL+= linha_c.at(1)+","+linha_c.at(2)+",'"+linha_c.at(3)+"',"+linha_c.at(0)+"00,";
						AUX.clear();
						AUX = linha_c.at(4);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+","+AUX+",";
						SQL+= "'"+linha_c.at(5)+"',";
						SQL+= AUX+",";
						AUX.clear();
						AUX = linha_c.at(6);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						SQL+= loc_cas(Clarion,linha_c.at(9))+",";
						SQL+= "'"+get_regimes (linha_c.at(10))+"',";
						SQL+= "'"+linha_c.at(11)+"',";
						SQL+= "'"+linha_c.at(12)+"',";
						noivo_sistema(Firebird,linha_c.at(7));
						noivo.clear();
						noivo = codnoiv;
						SQL+= codnoiv+",";
						noiva_sistema(Firebird,linha_c.at(8));
						noiva.clear();
						noiva = codnoiv;
						SQL+= codnoiv+",";
						SQL+= cidade(Clarion,Firebird,cod_cidade)+",'"+linha_c.at(13);
						SQL+= "');";
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (!casou(Firebird,noivo,noiva))
							{
							cr++;
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"CASAMENTO",Glib::convert(noivo+" "+noiva, "UTF-8", "ISO-8859-1"));
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						/*SQL += "\n";
						iter = BF_Result->insert(iter,Glib::ustring(SQL));*/
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
						/*if (i == 5)
							{
							break;
							}*/						
						}
//					TV_Result->set_buffer(BF_Result);
					aux = new char[100];
					sprintf(aux,"\ncommit;\n--Total: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem));
				}
//			TV_Log->set_buffer (BF_Log);
			break;
			}
		case 5:
			{
			if (opc_sql != 5)
				{
				pagina = 0;
				SQL.clear();
				SQL = "select * from nascimentos where cod_firebird is null";
				sql = new char[SQL.length()+1];
				strcpy(sql,SQL.c_str());
				executar(sql,2);
				delete sql;
				if (query_result != 3)
					{
					total = registros;
					}
				if (total > 0)
					{
					paginas = (int) ceilf((float)total/paginacao);
					}
				}
			opc_sql = 5;
			r_inicio = pagina*paginacao;
			arq_sql.clear();
			arq_sql = "Nascimentos-";
			aux = new char[32];
			sprintf (aux,"%03d-de-%03d",(pagina+1),paginas);
			arq_sql.append(aux);
			Texto_Nav->set_label(Glib::ustring(aux));
			delete aux;
			arq_sql += ".sql";
			//Nascimentos
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Nascimentos\n"));
//			Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
			SQL.clear();
			//               0       1      2       3       4       5       6       7       8      
			SQL = "select LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, DATAXX, HORAXX, ";
			//         9       10     11       12      13     14       15      16      17      18
			SQL += "NOMPAI, PROPAI, NOMMAE, PROMAE, DATPAI, DATMAE, CASADOS, DECLAR, AVOPAT, AVAPAT, ";
			//        19     20       21      22      23
			SQL += "AVOMAT, AVAMAT, OBSERV, LOCALX, DISTRITO ";
			SQL += "from nascimentos where cod_firebird is null ";
			SQL += "order by LIVROX, FOLHAX limit "; 
			aux = new char[32];
			sprintf (aux,"%d,%d",r_inicio,paginacao);
			SQL.append(aux);
			delete aux; 
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			executar(sql,2);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
//			Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					cr = cnr = 0;
					dd_c = resultados;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",total);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
//					Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						//linha_c = dd_c.at(1);
						SQL.clear();
						SQL = "insert into NASCIMENTO (CODNASCIMENTO,LIVRONASCIMENTO,FOLHANASCIMENTO,FRENTEVERSO,";
						SQL+= "ORDEMNASCIMENTO,DATAREGISTRO,DATADIGITADO,NOME,SEXO,DATANASC,HORANASC,NOMEPAI,PROFISSAOPAI,";
						SQL+= "NOMEMAE, PROFISSAOMAE, DATANASC_PAI, DATANASC_MAE, ESTADOCIVILPAI, ESTADOCIVILMAE,DECLARANTE,AVOPATERNO,AVOPATERNA,";
						SQL+= "AVOMATERNO, AVOMATERNA, OBSERVACAO, CODMATERNIDADE, CODESCREVENTE, CODCIDADE,";
						SQL+= "TIPOINCLUSAO, TIPOREGISTRO, CODLOCALIDADE, GEMEO, SITUACAOREGISTRO, TIPOGRAVIDEZ";
						SQL+= ")values (GEN_ID(CODNASCIMENTO_GEN,1),";
						SQL+= linha_c.at(0)+","+linha_c.at(1)+",'"+linha_c.at(2).substr(0,1)+"',";
						SQL+= linha_c.at(3)+",";
						AUX.clear();
						AUX = linha_c.at(4);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+","+AUX+",";
						SQL+= "'"+linha_c.at(5)+"',";
						AUX.clear();
						AUX = linha_c.at(6);
						SQL+= "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						AUX.clear();
						AUX = linha_c.at(7);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						AUX.clear();
						AUX = linha_c.at(8);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						SQL+= "'"+linha_c.at(9)+"',";
						SQL+= profissao(Clarion,linha_c.at(10))+",";
						SQL+= "'"+linha_c.at(11)+"',";
						SQL+= profissao(Clarion,linha_c.at(12))+",";
						AUX.clear();
						AUX = linha_c.at(13);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						AUX.clear();
						AUX = linha_c.at(14);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						AUX.clear();
						AUX = linha_c.at(15);
						if (AUX.compare("sim") == 0)
							{
							SQL += "'2','2',";
							}
						else
							{
							SQL += "'1','1',";
							}
						SQL+= "'"+linha_c.at(16)+"',";
						SQL+= "'"+linha_c.at(17)+"',";
						SQL+= "'"+linha_c.at(18)+"',";
						SQL+= "'"+linha_c.at(19)+"',";
						SQL+= "'"+linha_c.at(20)+"',";
						AUX = linha_c.at(21);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						SQL+= local_nasc (Clarion,Firebird,linha_c.at(22));
						SQL+= ",21,"+cod_cidade+",'A','R',";
						SQL+= linha_c.at(23);
						SQL+= ",'N','A',1);";
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (!nasceu(Firebird,linha_c.at(0),linha_c.at(1),linha_c.at(5)))
							{
							cr++;
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"NASCIMENTO",Glib::convert(linha_c.at(0)+" "+linha_c.at(1)+" "+linha_c.at(5), "UTF-8", "ISO-8859-1"));
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
//						Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
						/*if (i == 5)
							{
							break;
							}	*/					
						}
					aux = new char[100];
					sprintf(aux,"\ncommit;\n--Total: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem));
//				Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
				}
			break;
			}
		case 6:
			{
			if (opc_sql != 6)
				{
				pagina = 0;
				SQL.clear();
				SQL = "select * from obitos where cod_firebird is null";
				sql = new char[SQL.length()+1];
				strcpy(sql,SQL.c_str());
				executar(sql,2);
				delete sql;
				if (query_result != 3)
					{
					total = registros;
					}
				if (total > 0)
					{
					paginas = (int) ceilf((float)total/paginacao);
					}
				}
			opc_sql = 5;
			r_inicio = pagina*paginacao;
			arq_sql.clear();
			arq_sql = "Obitos-";
			aux = new char[32];
			sprintf (aux,"%03d-de-%03d",(pagina+1),paginas);
			arq_sql.append(aux);
			Texto_Nav->set_label(Glib::ustring(aux));
			delete aux;
			arq_sql += ".sql";
			//Nascimentos
			l_iter = BF_Log->insert(l_iter,Glib::ustring("Obitos\n"));
//			Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
			SQL.clear();
			//               0       1      2       3       4       5       6       7       8         9 	10       11     
			SQL = "select LIVROX, FOLHAX, FREVER, TERMOX, DATREG, NOMEXX, SEXOXX, ENDERE, BAIFAL, DATNAS, PROFIS, ESTCIV, ";
			//        12     13     14     15      16           17                 18               19                     20
			SQL += "PAIXX, PROPAI, MAEXX, PROMAE, DECLAR, GRAUPARENTESCO, ESTADOCIVILDECLARANTE, NACIONALIDADEDECLARANTE, RGDECL, ";
			//                   21                       22             23      24      25       26     27      28      29        30               
			SQL += "EXPEDIDORCARTEIRADECLARANTE, UFCARTEIRADECLARANTE, PRODEC, RESDEC, BAIDEC, MEDICO, DATOBI, HOROBI, CAUMOR, OBSERV, ";
			//          31       32       33     34      35        36          37
			SQL += "IDADEOBITO, TEMPO, TESTEM, FILHOS, ARROGO, TESTAMENTO, NATIMORTO ";
			SQL += "from obitos where cod_firebird is null ";
			SQL += "order by LIVROX, FOLHAX limit "; 
			aux = new char[32];
			sprintf (aux,"%d,%d",r_inicio,paginacao);
			SQL.append(aux);
			delete aux; 
			sql = new char[SQL.length()+1];
			strcpy(sql, SQL.c_str());
			SQL += "\n";
			executar(sql,2);
			l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
//			Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					cr = cnr = 0;
					dd_c = resultados;
					iter = BF_Result->insert(iter,Glib::ustring("--Registros: "));
					aux = new char[32];
					sprintf(aux,"%ld",total);
					AUX.clear();
					AUX.append(aux);
					AUX += "\n";
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
//					Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
					for (i_c = dd_c.begin(),i=1; i_c != dd_c.end(); ++i_c,i++)
						{
						linha_c = *i_c;
						//linha_c = dd_c.at(1);
						SQL.clear();
						SQL = "insert into OBITO (CODOBITO,NATIMORTO,LIVROOBITO,FOLHAOBITO,";
						SQL+= "FRENTEVERSO,ORDEMOBITO,DATAREGISTRO,DATADIGITADO,NOME,SEXO,";
						SQL+= "ENDERECO,BAIRRO,CODCIDADE,DATANASC,PROFISSAO,ESTADOCIVILFALECIDO,";
						SQL+= "NOMEPAI,PROFISSAOPAI,ESTADOCIVILPAI,NOMEMAE,PROFISSAOMAE,ESTADOCIVILMAE,";
						SQL+= "DECLARANTE,QUALIFICACAODECLARANTE,ENDERECODECLARANTE,NOMEMEDICO,";
						SQL+= "DATAOBITO,HORAOBITO,CAUSAMORTE,";
						SQL+= ")values (GEN_ID(CODOBITO_GEN,1),";
						AUX.clear();
						AUX = linha_c.at(37);
						if (AUX.empty ())
							{
							SQL+= "'N'";
							}
						else
							{
							SQL+= "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
							}
						SQL+= linha_c.at(0)+","+linha_c.at(1)+",'"+linha_c.at(2).substr(0,1)+"',";
						SQL+= linha_c.at(3)+",";
						AUX.clear();
						AUX = linha_c.at(4);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+","+AUX+",";
						SQL+= "'"+linha_c.at(5)+"',";
						AUX.clear();
						AUX = linha_c.at(6);
						SQL+= "'"+ParaMaiusculos(AUX.substr(0,1))+"',";
						SQL+= "'"+linha_c.at(7)+"','";
						SQL+= bairro(Clarion,linha_c.at(8))+"',";
						SQL+= cidade(Clarion,Firebird,cod_cidade)+",";
						AUX.clear();
						AUX = linha_c.at(9);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",'";
						SQL+= profissao(Clarion,linha_c.at(10))+"',";
						SQL+= qual_ec (linha_c.at(11))+",";
						SQL+= "'"+linha_c.at(12)+"','";
						SQL+= profissao(Clarion,linha_c.at(13))+"',9,";
						SQL+= "'"+linha_c.at(14)+"','";
						SQL+= profissao(Clarion,linha_c.at(15))+"',9,";
						SQL+= "'"+linha_c.at(16)+"','Parentesco: "+parentesco (Clarion,linha_c.at(17));
						SQL+= ", "+linha_c.at(19)+", "+linha_c.at(18)+", "+profissao(Clarion,linha_c.at(23));
						SQL+= ", portador da cédula de identidade "+linha_c.at(20)+" "+linha_c.at(21);
						SQL+= "/"+linha_c.at(22)+"','"+linha_c.at(23)+"',";
						SQL+= "'"+medico(Clarion,linha_c.at(26))+"',";
						AUX.clear();
						AUX = linha_c.at(27);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",";
						AUX.clear();
						AUX = linha_c.at(28);
						if (AUX.compare("null") != 0)
							{
							AUX = "'"+AUX+"'";
							}
						SQL+= AUX+",'"+linha_c.at(29)+"','"+linha_c.at(30)+"',";
						SQL+= "'"+linha_c.at(32)+"','";
						AUX.clear();
						AUX = linha_c.at(33);
						if (AUX.compare("0") == 0)
							{
							AUX = "A";
							}
						else
							{
							AUX = ParaMaiusculos(AUX.substr(0,1));
							}
						SQL+= AUX+"',";
						SQL+= ");";
						SQL = Glib::convert(SQL, "UTF-8", "ISO-8859-1");
						if (!nasceu(Firebird,linha_c.at(0),linha_c.at(1),linha_c.at(5)))
							{
							cr++;
							SQL += "\n";
							iter = BF_Result->insert(iter,Glib::ustring(SQL));
							}
						else
							{
							cnr++;
							adiciona_sql(s_tempo,"NASCIMENTO",Glib::convert(linha_c.at(0)+" "+linha_c.at(1)+" "+linha_c.at(5), "UTF-8", "ISO-8859-1"));
							l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
							}
						aux = new char[32];
						sprintf(aux,"%d\t",i);
						AUX.clear();
						AUX.append(aux);
						delete aux;
						l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
//						Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
						/*if (i == 5)
							{
							break;
							}	*/					
						}
					aux = new char[100];
					sprintf(aux,"\ncommit;\n--Total: %d\tInseridos: %d\tNão Inseridos: %d\n",i,cr,cnr);
					AUX.clear();
					AUX.append(aux);
					delete aux;
					iter = BF_Result->insert(iter,Glib::ustring(AUX));
					l_iter = BF_Log->insert(l_iter,Glib::ustring(AUX));
					}
				}
			else
				{
				l_iter = BF_Log->insert(l_iter,Glib::ustring(Clarion->mensagem));
//				Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
				}
			break;
			}
		}
	delete Clarion;
	delete Firebird;
	}

string PRINCIPAL::org_exp(BANCOODBC *con, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "SEJUSP";
	SQL.clear();
	SQL = "select SIGLA from ORGAOS where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno.clear();
			retorno = linha.at(0);
			}
		}
	return retorno;
	}

string PRINCIPAL::profissao(BANCOODBC *con, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "null";
	SQL.clear();
	SQL = "select NOMEXX from PROFISSAO where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno.clear();
			retorno = "'"+linha.at(0)+"'";
			}
		}
	return retorno;
	}

string PRINCIPAL::bairro(BANCOODBC *con, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	cod_cidade.clear();
	cod_cidade = "5509";
	retorno.clear();
	retorno = "CENTRO";
	SQL.clear();
	SQL = "select BAIRRO, CODCID from BAIRROS where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno.clear();
			retorno = linha.at(0);
			cod_cidade.clear();
			cod_cidade = linha.at(1);
			}
		}
	return retorno;
	}

string PRINCIPAL::conjuge(BANCOODBC *con1, BANCOODBC *con2, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "null";
	if (codigo.compare("0") != 0)
		{
		SQL.clear();
		SQL = "select NOME from CLIENTES where CODIGO="+codigo;
		sql =  new char[SQL.length()+1];
		strcpy(sql, SQL.c_str());
		con1->executar(sql);
		delete sql;
		if (con1->query_result != 3)
			{
			if(con1->registros > 0)
				{
				linha = con1->resultados.at(0);
				SQL.clear();
				SQL = "select CODCLIENTE from CLIENTE where NOME='"+linha.at(0)+"'";
				sql = new char [SQL.length()+1];
				strcpy(sql,SQL.c_str());
				con2->executar(sql);
				delete sql;
				if (con2->query_result != 3)
					{
					if (con2->registros > 0)
						{
						linha = con2->resultados.at(0);
						retorno.clear();
						retorno = linha.at(0);
						}
					}
				}
			}
		}
	return retorno;
	}

string PRINCIPAL::nacao(BANCOODBC *con1, BANCOODBC *con2, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "1";
	if (codigo.compare("0") != 0)
		{
		SQL.clear();
		SQL = "select NACIONALIDADEMULHER from PAISES where CODIGO='"+codigo+"'";
		sql =  new char[SQL.length()+1];
		strcpy(sql, SQL.c_str());
		con1->executar(sql);
		delete sql;
		if (con1->query_result != 3)
			{
			if(con1->registros > 0)
				{
				linha = con1->resultados.at(0);
				SQL.clear();
				SQL = "select CODNACAO from NACIONALIDADE where NACIONALIDADE='"+ParaMaiusculos(linha.at(0))+"'";
				sql = new char [SQL.length()+1];
				strcpy(sql,SQL.c_str());
				con2->executar(sql);
				delete sql;
				if (con2->query_result != 3)
					{
					if (con2->registros > 0)
						{
						linha = con2->resultados.at(0);
						retorno.clear();
						retorno = linha.at(0);
						}
					}
				}
			}
		}
	return retorno;
	}

string PRINCIPAL::cidade(BANCOODBC *con1, BANCOODBC *con2, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "1";
	if (codigo.compare("0") != 0)
		{
		SQL.clear();
		SQL = "select NOMEXX from CIDADES where CODIGO='"+codigo+"'";
		sql =  new char[SQL.length()+1];
		strcpy(sql, SQL.c_str());
		con1->executar(sql);
		delete sql;
		if (con1->query_result != 3)
			{
			if(con1->registros > 0)
				{
				linha = con1->resultados.at(0);
				SQL.clear();
				SQL = "select CODCIDADE from CIDADE where CIDADE='"+ParaMaiusculos(linha.at(0))+"'";
				sql = new char [SQL.length()+1];
				strcpy(sql,SQL.c_str());
				con2->executar(sql);
				delete sql;
				if (con2->query_result != 3)
					{
					if (con2->registros > 0)
						{
						linha = con2->resultados.at(0);
						retorno.clear();
						retorno = linha.at(0);
						}
					}
				}
			}
		}
	return retorno;
	}

string PRINCIPAL::t_cpf_cnpj (string doc)
	{
	string retorno;
	int len, i;

	len = doc.length();
	if (len <= 11)
		{
		cpf = true;
		for (; len < 11; len++)
			{
			doc = "0"+doc;
			}
		}
	else
		{
		cpf = false;
		for (; len < 15; len++)
			{
			doc = "0"+doc;
			}
		}
	return doc;
	}

bool PRINCIPAL::nome_sistema (BANCOODBC *con, string nome)
	{
	string SQL;
	char *sql;
	vector<string> linha;
	bool retorno;

	retorno = false;
	codnoiv.clear();
	codnoiv = "null";
	SQL.clear();
	SQL = "SELECT CODCLIENTE FROM CLIENTE WHERE NOME='"+nome+"'";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	con->executar(sql);
	if (con->query_result != 3)
		{
		if (con->registros > 0)
			{
			linha = con->resultados.at(0);
			codnoiv = linha.at(0);
			retorno = true;
			}
		}
	return (retorno);
	}

bool PRINCIPAL::noivo_sistema (BANCOODBC *con, string nome)
	{
	string SQL;
	char *sql;
	vector<string> linha;
	bool retorno;

	retorno = false;
	codnoiv.clear();
	codnoiv = "null";
	nome = Glib::convert(nome, "UTF-8", "ISO-8859-1");
	SQL.clear();
	SQL = "SELECT CODNOIVO FROM NOIVO WHERE NOMENOIVO='"+nome+"'";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	con->executar(sql);
	if (con->query_result != 3)
		{
		if (con->registros > 0)
			{
			linha = con->resultados.at(0);
			codnoiv = linha.at(0);
			retorno = true;
			}
		}
	return (retorno);
	}

bool PRINCIPAL::noiva_sistema (BANCOODBC *con, string nome)
	{
	string SQL;
	char *sql;
	vector<string> linha;
	bool retorno;

	retorno = false;
	codnoiv.clear();
	codnoiv = "null";
	nome = Glib::convert(nome, "UTF-8", "ISO-8859-1");
	SQL.clear();
	SQL = "SELECT CODNOIVA FROM NOIVA WHERE NOMENOIVA='"+nome+"'";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	con->executar(sql);
	if (con->query_result != 3)
		{
		if (con->registros > 0)
			{
			linha = con->resultados.at(0);
			codnoiv = linha.at(0);
			retorno = true;
			}
		}
	return (retorno);
	}

void PRINCIPAL::adiciona_sql(char *tempo, string tipo ,string Log)
	{
	string SQL;
	char *sql;

	l_iter = BF_Log->insert(l_iter,Glib::ustring("Adicionando: "));
//	Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
	l_iter = BF_Log->insert(l_iter,Glib::ustring(tipo+"\n"));
//	Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
	SQL.clear();
	SQL = "insert into logs values(";
	SQL.append(tempo);
	//SQL += ",'"+tipo+"','"+tratar_apostrofo(Log)+"');";
	SQL += ",'"+tipo+"','"+Log+"');";	
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	SQL += "\n";
	executar(sql,1);
	l_iter = BF_Log->insert(l_iter,Glib::ustring(SQL));
//	Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
	if (query_result == 3)
		{
		l_iter = BF_Log->insert(l_iter,Glib::ustring(mensagem+"\n"));
//		Glib::signal_idle().connect(sigc::bind<int>(sigc::mem_fun(*this, &PRINCIPAL::escrever),2));
		}
	}

string PRINCIPAL::tratar_apostrofo(string txt)
	{
	string bf;
	size_t i;
	bf.clear();
	bf = txt;
	i = bf.find_first_of('\'');
	while( i != string::npos)
		{
		bf.replace(i, 1, "''");
		i = bf.find_first_of('\'',i+1);
		}
	return(bf);
	}

string PRINCIPAL::loc_cas(BANCOODBC *con, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "null";
	cod_cidade.clear();
	cod_cidade = "5509";
	SQL.clear();
	SQL = "select DESCRI,CIDADE from LOCALCASAMENTO where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno.clear();
			retorno = "'"+linha.at(0)+"'";
			if (linha.at(1).compare("0") != 0)
				{
				cod_cidade = linha.at(1);
				}
			}
		}
	return retorno;
	}

bool PRINCIPAL::casou(BANCOODBC *con, string noivo, string noiva)
	{
	string SQL;
	char *sql;
	bool retorno;

	retorno = false;
	SQL.clear();
	SQL = "select PROCESSO from CASAMENTO where CODNOIVO="+noivo+" and CODNOIVA="+noiva;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			retorno = true;
			}
		}
	return retorno;
	}

string PRINCIPAL::local_nasc(BANCOODBC *con1, BANCOODBC *con2, string codigo)
	{
	string SQL, retorno;
	char *sql;
	vector<string> linha;

	retorno.clear();
	retorno = "1";
	cod_cidade.clear();
	cod_cidade = "1";
	if (codigo.compare("0") != 0)
		{
		SQL.clear();
		SQL = "select l.NOMEXX, c.NOMEXX from LOCALNASCIMENTO l inner join CIDADE c on l.CODCID=c.CODIGO where l.CODIGO='"+codigo+"'";
		sql =  new char[SQL.length()+1];
		strcpy(sql, SQL.c_str());
		con1->executar(sql);
		delete sql;
		if (con1->query_result != 3)
			{
			if(con1->registros > 0)
				{
				linha = con1->resultados.at(0);
				SQL.clear();
				SQL = "select CODMATERNIDADE from MATERNIDADE where NOMEMATERNIDADE='"+ParaMaiusculos(linha.at(0))+"'";
				sql = new char [SQL.length()+1];
				strcpy(sql,SQL.c_str());
				con2->executar(sql);
				delete sql;
				if (con2->query_result != 3)
					{
					if (con2->registros > 0)
						{
						linha = con2->resultados.at(0);
						retorno.clear();
						retorno = linha.at(0);
						}
					}
				SQL.clear();
				SQL = "select CODCIDADE from CIDADE where CIDADE='"+ParaMaiusculos(linha.at(1))+"'";
				sql = new char [SQL.length()+1];
				strcpy(sql,SQL.c_str());
				con2->executar(sql);
				delete sql;
				if (con2->query_result != 3)
					{
					if (con2->registros > 0)
						{
						linha = con2->resultados.at(0);
						cod_cidade.clear();
						cod_cidade = linha.at(0);
						}
					}
				}
			}
		}
	return retorno;
	}

bool PRINCIPAL::nasceu(BANCOODBC *con, string livro, string folha, string nome)
	{
	string SQL;
	char *sql;
	bool retorno;
	vector<string> linha;

	retorno = false;
	cod_nasc.clear();
	cod_nasc = "null";
	nome = Glib::convert(nome, "UTF-8", "ISO-8859-1");
	SQL.clear();
	SQL = "select CODNASCIMENTO from NASCIMENTO where LIVRONASCIMENTO="+livro+" and FOLHANASCIMENTO="+folha+" and NOME='"+nome+"'";
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			cod_nasc = linha.at(0);
			retorno = true;
			}
		}
	return retorno;
	}

bool PRINCIPAL::escrever(int onde)
	{
	switch(onde)
		{
		case 1:
			{
			TV_Result->set_buffer(BF_Result);
			break;
			}
		case 2:
			{
			TV_Log->set_buffer (BF_Log);
			//BF_Log = TV_Log->get_buffer ();
			//l_iter = BF_Log->end();
			break;
			}
		}
	return (carregar_log);
	}
	
void PRINCIPAL::navegar(int modo)
	{
	switch(modo)
		{
		case 0:
			{
			pagina = 0;
			gerar_sql (opc_sql);
			break;
			}
		case 1:
			{
			if (pagina > 0)
				{
				pagina--;
				}
			gerar_sql (opc_sql);
			break;
			}
		case 2:
			{
			if (pagina < paginas-1)
				{
				pagina++;
				}
			gerar_sql (opc_sql);
			break;
			}
		case 3:
			{
			if (pagina != paginas)
				{
				pagina = paginas;
				}
			gerar_sql (opc_sql);
			break;
			}
		}
	}

void PRINCIPAL::verificar (int oq)
	{
	vector<vector<string> > dd;
	vector<vector<string> >::iterator i;
	vector<string> linha;
	string SQL;
	char *sql;
	int colunas, j;

	Firebird = new BANCOODBC(alias_firebird,user_firebird,senha_firebird);
	arvore_ref = Gtk::ListStore::create(arvore_reg);
	TrVAnalise->set_model(arvore_ref);
	switch(oq)
		{
		case 1:
			{
			colunas = 2;
			TrVAnalise->remove_all_columns();
			TrVAnalise->append_column(Glib::ustring("Nome Cliente Clarion"), arvore_reg.campo[0]);
			TrVAnalise->append_column(Glib::ustring("Código Firebird"), arvore_reg.campo[1]);
			break;
			}
		case 2:
			{
			SQL = "select id, NOMHOM from noivos order by NOMHOM";
				//limit 0,20";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			executar(sql,2);
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					dd = resultados;
					for (i=dd.begin(); i != dd.end(); ++i)
						{
						linha = *i;
						celula = *(arvore_ref->append());
						celula[arvore_reg.campo[0]] = Glib::convert(linha.at(1), "UTF-8", "ISO-8859-1");
						noivo_sistema (Firebird, linha.at(1));
						celula[arvore_reg.campo[1]] = codnoiv;
						celula[arvore_reg.campo[2]] = atualizar_codigo (oq,linha.at(0),codnoiv);
						}
					}
				}
			colunas = 3;
			TrVAnalise->remove_all_columns();
			TrVAnalise->append_column(Glib::ustring("Nome Noivo Clarion"), arvore_reg.campo[0]);
			TrVAnalise->append_column(Glib::ustring("Código Firebird"), arvore_reg.campo[1]);
			TrVAnalise->append_column(Glib::ustring("Dado Local"), arvore_reg.campo[2]);
			break;
			}
		case 3:
			{
			SQL = "select id, NOMMUL from noivas order by NOMMUL";
				//limit 0,20";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			executar(sql,2);
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					dd = resultados;
					for (i=dd.begin(); i != dd.end(); ++i)
						{
						linha = *i;
						celula = *(arvore_ref->append());
						celula[arvore_reg.campo[0]] = Glib::convert(linha.at(1), "UTF-8", "ISO-8859-1");
						noiva_sistema (Firebird, linha.at(1));
						celula[arvore_reg.campo[1]] = codnoiv;
						celula[arvore_reg.campo[2]] = atualizar_codigo (oq,linha.at(0),codnoiv);
						}
					}
				}
			colunas = 3;
			TrVAnalise->remove_all_columns();
			TrVAnalise->append_column(Glib::ustring("Nome Noivo Clarion"), arvore_reg.campo[0]);
			TrVAnalise->append_column(Glib::ustring("Código Firebird"), arvore_reg.campo[1]);
			TrVAnalise->append_column(Glib::ustring("Dado Local"), arvore_reg.campo[2]);
			break;
			}
		case 5:
			{
			SQL = "select id, LIVROX, FOLHAX, NOMEX from nascimentos order by LIVROX, FOLHAX";
				//limit 0,20";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str());
			executar(sql,2);
			delete sql;
			if (query_result != 3)
				{
				if (registros > 0)
					{
					dd = resultados;
					for (i=dd.begin(); i != dd.end(); ++i)
						{
						linha = *i;
						celula = *(arvore_ref->append());
						celula[arvore_reg.campo[0]] = Glib::convert(linha.at(1), "UTF-8", "ISO-8859-1");
						celula[arvore_reg.campo[1]] = Glib::convert(linha.at(2), "UTF-8", "ISO-8859-1");
						celula[arvore_reg.campo[2]] = Glib::convert(linha.at(3), "UTF-8", "ISO-8859-1");
						nasceu (Firebird, linha.at(1), linha.at(2), linha.at(3));
						celula[arvore_reg.campo[3]] = cod_nasc;
						celula[arvore_reg.campo[4]] = atualizar_codigo (oq,linha.at(0),cod_nasc);
						}
					}
				}
			colunas = 5;
			TrVAnalise->remove_all_columns();
			TrVAnalise->append_column(Glib::ustring("Livro"), arvore_reg.campo[0]);
			TrVAnalise->append_column(Glib::ustring("Folha"), arvore_reg.campo[1]);
			TrVAnalise->append_column(Glib::ustring("Nome"), arvore_reg.campo[2]);
			TrVAnalise->append_column(Glib::ustring("Código Firebird"), arvore_reg.campo[3]);
			TrVAnalise->append_column(Glib::ustring("Dado Local"), arvore_reg.campo[4]);
			break;
			}
		}
	for(j=0; j < colunas; j++)
		{
		Gtk::TreeView::Column* coluna_temp = TrVAnalise->get_column(j);
		coluna_temp->set_reorderable();
		}
	delete Firebird;
	}

string PRINCIPAL::atualizar_codigo(int onde, string id, string codigo)
	{
	string SQL;
	char *sql;

	SQL.clear();
	switch(onde)
		{
		case 1:
			{
			break;
			}
		case 2:
			{
			SQL = "update noivos set cod_firebird="+codigo+" where id="+id;
			break;
			}
		case 3:
			{
			SQL = "update noivas set cod_firebird="+codigo+" where id="+id;
			break;
			}
		case 4:
			{
			SQL = "update casamentos set cod_firebird="+codigo+" where id="+id;
			break;
			}
		case 5:
			{
			SQL = "update nascimentos set cod_firebird="+codigo+" where id="+id;
			break;
			}
		}
	if (!SQL.empty ())
		{
		sql =  new char[SQL.length()+1];
		strcpy(sql, SQL.c_str());
		executar(sql,1);
		if (query_result != 3)
			{
			return string("OK");
			}
		else
			{
			return mensagem;
			}
		}
	else
		{
		return string("null");
		}
	}

void PRINCIPAL::relatorio(int tipo)
	{
	IMPRIMIR *relat;

	relat = new IMPRIMIR(tipo);
	delete relat;
	}

string PRINCIPAL::qual_ec (string dd)
	{
	string retorno;
	EST_CIV aux;
	vector<EST_CIV>::iterator i;

	retorno.clear();
	retorno = "0";
	for (i = estado_civil.begin(); i != estado_civil.end(); ++i)
		{
		aux = *i;
		if (aux.dado.compare(dd) == 0)
			{
			retorno.clear();
			retorno = aux.codigo;
			break;
			}
		}
	return (retorno);
	}

string PRINCIPAL::parentesco(BANCOODBC *con, string codigo)
	{
	string SQL;
	char *sql;
	string retorno;
	vector<string> linha;

	retorno.clear();
	SQL.clear();
	SQL = "select GRAUPARENTESCO from PARENTES where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno = linha.at(0);
			}
		}
	return retorno;
	}

string PRINCIPAL::medico(BANCOODBC *con, string codigo)
	{
	string SQL;
	char *sql;
	string retorno;
	vector<string> linha;

	retorno.clear();
	SQL.clear();
	SQL = "select MEDICO from MEDICOS where CODIGO="+codigo;
	sql =  new char[SQL.length()+1];
	strcpy(sql, SQL.c_str());
	con->executar(sql);
	delete sql;
	if (con->query_result != 3)
		{
		if(con->registros > 0)
			{
			linha = con->resultados.at(0);
			retorno = linha.at(0);
			}
		}
	return retorno;
	}